package com.jerry.provider.dao;

import com.jerry.common.bean.Order;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface OrderDao {

    /**
     * 查询所有的订单列表
     * @return
     */
    @Select("select * from t_order")
    @Results({
            @Result(property = "totalPrice",column = "total_price"),
            @Result(property = "number",column = "number"),
            //查询订单所对应的用户信息 一对一关系
            @Result(property = "user",         // 返回的结果赋值给order实体的user属性
                    column = "user_id",        // order表中的user_id作为'UserDao.findById'的查询参数
                    one = @One(select = "com.jerry.provider.dao.UserDao.findById")     // 一对一查询
            ),
            //查询订单所对应的商品信息  一对多关系
            @Result(property = "productList",   // 返回的结果赋值给order实体的productList属性
                    column = "number",              // order表中的no作为'OrderDetailDao.findByOrderNo'的查询参数
                    javaType = List.class,
                    many = @Many(select = "com.jerry.provider.dao.OrderDetailDao.findByOrderNumber")     // 一对多查询
            )
    })
    public List<Order> findAll();

    /**
     * 根据订单号查询订单
     * @param orderNo
     * @return
     */
    @Select("select * from t_order where number=#{orderNumber}")
    @Results({
            @Result(property = "totalPrice",column = "total_price"),
            @Result(property = "number",column = "number"),
            //查询订单所对应的用户信息 一对一关系
            @Result(property = "user",         // 返回的结果赋值给order实体的user属性
                    column = "user_id",        // order表中的user_id作为'UserDao.findById'的查询参数
                    one = @One(select = "com.jerry.provider.dao.UserDao.findById")     // 一对一查询
            ),
            //查询订单所对应的商品信息  一对多关系
            @Result(property = "productList",   // 返回的结果赋值给order实体的productList属性
                    column = "number",              // order表中的no作为'OrderDetailDao.findByOrderNumber'的查询参数
                    javaType = List.class,
                    many = @Many(select = "com.jerry.provider.dao.OrderDetailDao.findByOrderNumber")     // 一对多查询
            )
    })
    public Order findByOrderNumber(String orderNumber);

    /**
     * 根据用户id查询订单
     * @param userId
     * @return
     */
    @Select("select * from t_order where user_id=#{userId}")
    @Results({
            @Result(property = "totalPrice",column = "total_price"),
            @Result(property = "number",column = "number"),
            //查询订单所对应的用户信息 一对一关系
            @Result(property = "user",         // 返回的结果赋值给order实体的user属性
                    column = "user_id",        // order表中的user_id作为'UserDao.findById'的查询参数
                    one = @One(select = "com.jerry.provider.dao.UserDao.findById")     // 一对一查询
            ),
            //查询订单所对应的商品信息  一对多关系
            @Result(property = "productList",   // 返回的结果赋值给order实体的productList属性
                    column = "number",              // order表中的no作为'OrderDetailDao.findByOrderNumber'的查询参数
                    javaType = List.class,
                    many = @Many(select = "com.jerry.provider.dao.OrderDetailDao.findByOrderNumber")     // 一对多查询
            )
    })
    public List<Order> findByUserId(long userId);

}
